var _ = require('./utility');
function buildPayload(accessToken, data, jsonBackup) {
if (_.isType(data.context, 'object')) {
var contextResult = _.stringify(data.context, jsonBackup);
if (contextResult.error) {
data.context = 'Error: could not serialize \'context\'';
} else {
data.context = contextResult.value || '';
}
if (data.context.length > 255) {
data.context = data.context.substr(0, 255);
}
}
return {
access_token: accessToken,
data: data
};
}
function getTransportFromOptions(options, defaults, url) {
var hostname = defaults.hostname;
var protocol = defaults.protocol;
var port = defaults.port;
var path = defaults.path;
var search = defaults.search;
var proxy = options.proxy;
if (options.endpoint) {
var opts = url.parse(options.endpoint);
E hostname = opts.hostname;
protocol = opts.protocol;
port = opts.port;
path = opts.pathname;
search = opts.search;
}
return {
hostname: hostname,
protocol: protocol,
port: port,
path: path,
search: search,
proxy: proxy
};
}
function transportOptions(transport, path, method) {
var protocol = transport.protocol || 'https:';
var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);
var hostname = transport.hostname;
path = appendPathToPath(transport.path, path);
if (transport.search) {
path = path + transport.search;
}
if (transport.proxy) {
path = protocol + '//' + hostname + path;
hostname = transport.proxy.host || transport.proxy.hostname;
port = transport.proxy.port;
protocol = transport.proxy.protocol || protocol;
}
return {
protocol: protocol,
hostname: hostname,
path: path,
port: port,
method: method
};
}
function appendPathToPath(base, path) {
var baseTrailingSlash = /\/$/.test(base);
var pathBeginningSlash = /^\//.test(path);
if (baseTrailingSlash && pathBeginningSlash) {
path = path.substring(1);
} else if (!baseTrailingSlash && !pathBeginningSlash) {
path = '/' + path;
}
return base + path;
}
module.exports = {
buildPayload: buildPayload,
getTransportFromOptions: getTransportFromOptions,
transportOptions: transportOptions,
appendPathToPath: appendPathToPath
};
|